#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>

void removeZeros(int arr[], int *n) {
    int count = 0; // 用于记录非零元素的数量

    // 遍历数组
    for (int i = 0; i < *n; i++) {
        // 如果当前元素不是0，则将其移动到前面
        if (arr[i] != 0) {
            arr[count] = arr[i];
            count++; // 增加非零元素的计数
        }
    }

    // 更新数组的长度，去掉所有0元素后的长度
    *n = count;
}

void removeChar(char *str, char remove, int *n) {
    int count = 0;
    for (int i = 0; i < *n; i++) {
        if (str[i] != remove) {
            str[count] = str[i];
            count++;
        }
    }
    *n = count;
}

void removeNullChars(char *str) {
    int count = 0;
    for (int i = 0; str[i]; i++) {
        if (str[i] != '\0') {
            str[count++] = str[i];
        }
    }
    str[count] = '\0';
}

int main(int argc, char *argv[])
{

    int num1, num2, result;
    char operator;
    int countt = 0;
    int numbers[100];
    char ops[100];
    char input[100];

    printf("请输入一个简单的数学表达式（例如：2 + 3）：");
    fgets(input, 100, stdin);
    for (int i = 0; i < strlen(input); i++)
    {
        if (input[i] >= '0' && input[i] <= '9')
        {
            numbers[countt] = input[i] - '0';
            countt++;
        }
    }
    int op_count = 0;
    for (int i = 0; i < strlen(input); i++)
    {
        if (input[i] == '-' || input[i] == '+' || input[i] == '*' || input[i] == '/' || input[i] == '%')
        {
            ops[op_count] = input[i];
            op_count++;
        }
    }

    for (int i = 0; i < countt; i++)
    {
        printf("%d.number: %d\n", i,numbers[i]);
    }
    for (int i = 0; i < op_count; i++)
    {
        printf("%d.operator: %c\n",i, ops[i]);
    }


    int muli = 0;
    for (size_t i = 0; i < op_count; i++)
    {

        if (ops[i] == '*')
        {
            muli = i;
            numbers[i + 1] = numbers[muli] * numbers[i + 1]; // 计算乘法
            numbers[i] = 0;
            ops[i] = '0';
            // op_count--;
        }

    }
    removeZeros(numbers, &countt); // 去掉所有0元素
    //removeZeros(ops, &op_count); // 去掉所有0元素
    removeChar(ops, '0', &op_count); // 去掉所有0元素

    for (size_t i = 0; i < op_count; i++)
    {
        if (ops[i] == '/')
        {

            numbers[i + 1] = numbers[i] / numbers[i + 1]; // 计算除法
            numbers[i] = 0;
            ops[i] = '0';
            // op_count--;
        }
    }
    removeZeros(numbers, &countt); // 去掉所有0元素
    // removeZeros(ops, &op_count); // 去掉所有0元素
    removeChar(ops, '0', &op_count); // 去掉所有0元素

    //乘法与除法完成后数组是
    printf("乘法与除法完成后数组是：\n");
    for (int i = 0; i < countt; i++)
    {
        printf("%d.number: %d\n", i,numbers[i]);
    }
    for (int i = 0; i < op_count; i++)
    {
        printf("%d.operator: %c\n",i, ops[i]);
    }
    printf("-----------------\n"); // 输出计算结果
    //---------------------------------------


    for (int i = 0; i < op_count; i++){
        if (ops[i] == '+')
        {
            numbers[i + 1] = numbers[i] + numbers[i + 1]; // 计算加法
            numbers[i] = 0;
            ops[i] = '0';
        }

    }
    removeZeros(numbers, &countt); // 去掉所有0元素
    removeChar(ops, '0', &op_count); // 去掉所有0元素

    for (int i = 0; i < op_count; i++){
        if (ops[i] == '-')
        {
            numbers[i + 1] = numbers[i + 1] - numbers[i]; // 计算减法
            numbers[i] = 0;
            ops[i] = '0';
        }

    }
    removeZeros(numbers, &countt); // 去掉所有0元素
    removeChar(ops, '0', &op_count); // 去掉所有0元素

    printf("计算结果为：%d\n", numbers[0]); // 输出计算结果

    return 0;
}